package poker

import "math/rand"

type Card int // 使用一个整数表示一张牌

// 牌的花色和大小名称
var (
	suits = []string{"♠", "♥", "♦", "♣"}
	ranks = []string{"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}
)

// Suit 获取牌的花色 (0-3 分别表示4种花色)
func (c Card) Suit() int {
	return int(c) / 13
}

// Rank 获取牌的大小 (0-12 对应 2-A)
func (c Card) Rank() int {
	return int(c) % 13
}

// 转换为可读字符串
func (c Card) String() string {
	return suits[c.Suit()] + ranks[c.Rank()]
}

// NewShuffledDeck 创建一副新牌(已洗好)
func NewShuffledDeck() []Card {
	deck := make([]Card, 52)
	for i := 0; i < 52; i++ {
		deck[i] = Card(i)
	}

	// 洗牌
	rand.Shuffle(len(deck), func(i, j int) {
		deck[i], deck[j] = deck[j], deck[i]
	})

	return deck
}
